{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 506 entries, 0 to 505\n",
      "Data columns (total 14 columns):\n",
      "CRIM       506 non-null float64\n",
      "ZN         506 non-null int64\n",
      "INDUS      506 non-null float64\n",
      "CHAS       506 non-null int64\n",
      "NOX        506 non-null float64\n",
      "RM         506 non-null float64\n",
      "AGE        506 non-null float64\n",
      "DIS        506 non-null float64\n",
      "RAD        506 non-null int64\n",
      "TAX        506 non-null int64\n",
      "PTRATIO    506 non-null int64\n",
      "B          506 non-null float64\n",
      "LSTAT      506 non-null float64\n",
      "MEDV       506 non-null float64\n",
      "dtypes: float64(9), int64(5)\n",
      "memory usage: 55.5 KB\n",
      "(506, 14)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "Index(['CRIM', 'ZN', 'INDUS', 'CHAS', 'NOX', 'RM', 'AGE', 'DIS', 'RAD', 'TAX',\n",
       "       'PTRATIO', 'B', 'LSTAT', 'MEDV'],\n",
       "      dtype='object')"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "import matplotlib as mpl\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns\n",
    "\n",
    "#\n",
    "mpl.rcParams['font.sans-serif']=['simHei']\n",
    "mpl.rcParams['axes.unicode_minus']=False\n",
    "\n",
    "df = pd.read_csv('boston_housing.csv')\n",
    "df.head()\n",
    "df.info()\n",
    "print(df.shape)#样本数目和特征维数\n",
    "df.columns#列的名字"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 1. 对连续型特征，可以用哪个函数可视化其分布？（给出你最常用的一个即可），并根据代码运行结果给出示例。 "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x27b52654f08>"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig = plt.figure()\n",
    "sns.distplot(df[\"MEDV\"],bins=30,kde=True)\n",
    "plt.xlabel(\"Median vlaue\",fontsize=12)\n",
    "#2:\n",
    "features = [\"MEDV\",]\n",
    "df[features].hist()\n",
    "plt.xlabel(\"MEDV\")\n",
    "plt.title(\"DataFrame\")\n",
    "plt.show\n",
    "#3、4箱体图和提琴图\n",
    "_,axes = plt.subplots(1,2,sharey=True,figsize=(6,4))\n",
    "sns.boxplot(data=df[\"MEDV\"],ax=axes[0])\n",
    "sns.violinplot(data=df[\"MEDV\"],ax=axes[1])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "distplot和DataFrame画直方图的区别在于，将样本等分，在distplot，将数据分为bins个小格，而DataFrame没有，则会略有区别。箱体图和提琴图则可以更形象的观察数据"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 2. 对两个连续型特征，可以用哪个函数得到这两个特征之间的相关性？根据代码运行结果，给出示例。 "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "         MEDV       ZN\n",
      "MEDV  1.00000  0.36058\n",
      "ZN    0.36058  1.00000\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "features = ['MEDV','ZN']\n",
    "data_corr = df[features].corr()\n",
    "sns.heatmap(data_corr,annot=True)\n",
    "print(data_corr)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 936x648 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#所有特征\n",
    "cols = df.columns\n",
    "data_corr = df.corr()\n",
    "data_corr_abs = df.corr().abs()\n",
    "plt.subplots(figsize=(13,9))\n",
    "sns.heatmap(data_corr_abs,annot=True)\n",
    "sns.heatmap(data_corr,mask=data_corr<0.5,cbar=False)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "RAD and TAX = 0.91\n",
      "NOX and DIS = 0.77\n",
      "INDUS and NOX = 0.76\n",
      "AGE and DIS = 0.75\n",
      "LSTAT and MEDV = 0.74\n",
      "NOX and AGE = 0.73\n",
      "INDUS and TAX = 0.72\n",
      "INDUS and DIS = 0.71\n",
      "RM and MEDV = 0.70\n",
      "NOX and TAX = 0.67\n",
      "ZN and DIS = 0.66\n",
      "INDUS and AGE = 0.64\n",
      "CRIM and RAD = 0.63\n",
      "RM and LSTAT = 0.61\n",
      "NOX and RAD = 0.61\n",
      "INDUS and LSTAT = 0.60\n",
      "AGE and LSTAT = 0.60\n",
      "INDUS and RAD = 0.60\n",
      "NOX and LSTAT = 0.59\n",
      "CRIM and TAX = 0.58\n",
      "ZN and AGE = 0.57\n",
      "TAX and LSTAT = 0.54\n",
      "DIS and TAX = 0.53\n",
      "ZN and INDUS = 0.53\n",
      "ZN and NOX = 0.52\n",
      "AGE and TAX = 0.51\n",
      "PTRATIO and MEDV = 0.51\n"
     ]
    }
   ],
   "source": [
    "#Set the threshold\n",
    "threshold = 0.5\n",
    "#List above threshold\n",
    "corr_list = []\n",
    "size = data_corr.shape[0]\n",
    "\n",
    "#Search it\n",
    "for i in range(0,size):\n",
    "    for j in range(i+1,size):\n",
    "        if abs(data_corr.iloc[i,j])>= threshold and abs(data_corr.iloc[i,j] )<1 :\n",
    "            corr_list.append([abs(data_corr.iloc[i][j]),i,j])\n",
    "            \n",
    "#higher to smaller\n",
    "s_corr_list = sorted(corr_list,key=lambda x:-abs(x[0]))\n",
    "\n",
    "#Print\n",
    "for v,i,j in s_corr_list:\n",
    "    print(\"%s and %s = %.2f\" % (cols[i],cols[j],v))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 3. 如果发现特征之间有较强的相关性，在选择线性回归模型时应该采取什么措施。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "一般情况下，类型特征之间，相关性是很小的，但在样本数据集中，如果发现特征具有较强的相关性，可以选择添加正则项，如（L1正则、L2正则）。或者可以选择使用降维操作，让维数特征上进行进行降相关。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 4. 当采用带正则的模型以及采用随机梯度下降优化算法时，需要对输入（连续型）特征进行去量纲预处理。课程代码给出了用标准化（StandardScaler）的结果，请改成最小最大缩放（MinMaxScaler）去量纲 ，并重新训练最小二乘线性回归、岭回归、和Lasso模型。 "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "#分离输入特征X和标签Y\n",
    "y = df['MEDV']\n",
    "X = df.drop('MEDV',axis = 1)\n",
    "\n",
    "#对房屋价格y做log变换，\n",
    "log_y = np.log1p(y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "#离散型特征（索引、）用独热编码\n",
    "X['RAD'].astype(\"object\")\n",
    "X_cat = X['RAD']\n",
    "X_cat = pd.get_dummies(X_cat,prefix='RAD')\n",
    "\n",
    "X = X.drop('RAD',axis=1)\n",
    "\n",
    "#特征名称，保存特征工程结果\n",
    "feat_names = X.columns\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>CRIM</th>\n",
       "      <th>ZN</th>\n",
       "      <th>INDUS</th>\n",
       "      <th>CHAS</th>\n",
       "      <th>NOX</th>\n",
       "      <th>RM</th>\n",
       "      <th>AGE</th>\n",
       "      <th>DIS</th>\n",
       "      <th>TAX</th>\n",
       "      <th>PTRATIO</th>\n",
       "      <th>...</th>\n",
       "      <th>RAD_2</th>\n",
       "      <th>RAD_3</th>\n",
       "      <th>RAD_4</th>\n",
       "      <th>RAD_5</th>\n",
       "      <th>RAD_6</th>\n",
       "      <th>RAD_7</th>\n",
       "      <th>RAD_8</th>\n",
       "      <th>RAD_24</th>\n",
       "      <th>MEDV</th>\n",
       "      <th>log_MEDV</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <td>0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.18</td>\n",
       "      <td>0.067815</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.314815</td>\n",
       "      <td>0.577505</td>\n",
       "      <td>0.641607</td>\n",
       "      <td>0.269203</td>\n",
       "      <td>0.208015</td>\n",
       "      <td>0.3</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.422222</td>\n",
       "      <td>0.666856</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>1</td>\n",
       "      <td>0.000236</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.242302</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.172840</td>\n",
       "      <td>0.547998</td>\n",
       "      <td>0.782698</td>\n",
       "      <td>0.348962</td>\n",
       "      <td>0.104962</td>\n",
       "      <td>0.5</td>\n",
       "      <td>...</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.368889</td>\n",
       "      <td>0.619696</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>2</td>\n",
       "      <td>0.000236</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.242302</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.172840</td>\n",
       "      <td>0.694386</td>\n",
       "      <td>0.599382</td>\n",
       "      <td>0.348962</td>\n",
       "      <td>0.104962</td>\n",
       "      <td>0.5</td>\n",
       "      <td>...</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.660000</td>\n",
       "      <td>0.833335</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>3</td>\n",
       "      <td>0.000293</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.063050</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.150206</td>\n",
       "      <td>0.658555</td>\n",
       "      <td>0.441813</td>\n",
       "      <td>0.448545</td>\n",
       "      <td>0.066794</td>\n",
       "      <td>0.6</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.631111</td>\n",
       "      <td>0.816001</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>4</td>\n",
       "      <td>0.000705</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.063050</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.150206</td>\n",
       "      <td>0.687105</td>\n",
       "      <td>0.528321</td>\n",
       "      <td>0.448545</td>\n",
       "      <td>0.066794</td>\n",
       "      <td>0.6</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.693333</td>\n",
       "      <td>0.852567</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 23 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "       CRIM    ZN     INDUS  CHAS       NOX        RM       AGE       DIS  \\\n",
       "0  0.000000  0.18  0.067815   0.0  0.314815  0.577505  0.641607  0.269203   \n",
       "1  0.000236  0.00  0.242302   0.0  0.172840  0.547998  0.782698  0.348962   \n",
       "2  0.000236  0.00  0.242302   0.0  0.172840  0.694386  0.599382  0.348962   \n",
       "3  0.000293  0.00  0.063050   0.0  0.150206  0.658555  0.441813  0.448545   \n",
       "4  0.000705  0.00  0.063050   0.0  0.150206  0.687105  0.528321  0.448545   \n",
       "\n",
       "        TAX  PTRATIO  ...  RAD_2  RAD_3  RAD_4  RAD_5  RAD_6  RAD_7  RAD_8  \\\n",
       "0  0.208015      0.3  ...      0      0      0      0      0      0      0   \n",
       "1  0.104962      0.5  ...      1      0      0      0      0      0      0   \n",
       "2  0.104962      0.5  ...      1      0      0      0      0      0      0   \n",
       "3  0.066794      0.6  ...      0      1      0      0      0      0      0   \n",
       "4  0.066794      0.6  ...      0      1      0      0      0      0      0   \n",
       "\n",
       "   RAD_24      MEDV  log_MEDV  \n",
       "0       0  0.422222  0.666856  \n",
       "1       0  0.368889  0.619696  \n",
       "2       0  0.660000  0.833335  \n",
       "3       0  0.631111  0.816001  \n",
       "4       0  0.693333  0.852567  \n",
       "\n",
       "[5 rows x 23 columns]"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#数据标准化 MinmaxScaler去量纲（最小最大缩放）\n",
    "from sklearn.preprocessing import MinMaxScaler\n",
    "\n",
    "#初始化特正和目标值的标准化器\n",
    "scaler_X = MinMaxScaler()\n",
    "scaler_y = MinMaxScaler()\n",
    "\n",
    "scaler_log_y = MinMaxScaler()\n",
    "\n",
    "y = np.array(y)\n",
    "log_y = np.array(log_y)\n",
    "\n",
    "#对训练和测试数据特征与目标值进行标准化处理\n",
    "X = scaler_X.fit_transform(X)\n",
    "\n",
    "#对y标准化不必须\n",
    "#对y标准化的好处是不同\n",
    "y = scaler_y.fit_transform(y.reshape(-1,1))\n",
    "log_y = scaler_y.fit_transform(log_y.reshape(-1,1))\n",
    "\n",
    "fe_data = pd.DataFrame(data = X,columns = feat_names,index = df.index)\n",
    "fe_data = pd.concat([fe_data,X_cat],axis=1,ignore_index=False)\n",
    "\n",
    "#加上标签y\n",
    "fe_data['MEDV'] = y\n",
    "fe_data['log_MEDV'] = log_y\n",
    "\n",
    "#保存到文件\n",
    "fe_data.to_csv('FE_boston_housing.csv',index=False)\n",
    "\n",
    "fe_data.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(404, 21)"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.model_selection import train_test_split\n",
    "from sklearn.metrics import r2_score\n",
    "\n",
    "#traning data and test data\n",
    "df = pd.read_csv('FE_boston_housing.csv')\n",
    "y = df['MEDV']\n",
    "X = df.drop(['MEDV','log_MEDV'],axis=1)\n",
    "feat_names = X.columns\n",
    "\n",
    "#traning data and test data\n",
    "\n",
    "#测试样本：20%随机数据\n",
    "X_train,X_test,y_train,y_test = train_test_split(X,y,random_state=33,test_size=0.2)\n",
    "X_train.shape\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The r2 score of LinearRegression on test is  0.6939789810509474\n",
      "The r2 score of LinearRegression on train is  0.7549146436868177\n"
     ]
    },
    {
     "ename": "ValueError",
     "evalue": "RGBA values should be within 0-1 range",
     "output_type": "error",
     "traceback": [
      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[1;31mValueError\u001b[0m                                Traceback (most recent call last)",
      "\u001b[1;32m<ipython-input-29-55a18beca0bd>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m\u001b[0m\n\u001b[0;32m     23\u001b[0m \u001b[0mf\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0max\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mplt\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0msubplots\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mfigsize\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;36m7\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;36m5\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m     24\u001b[0m \u001b[0mf\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mtight_layout\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 25\u001b[1;33m \u001b[0max\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mhist\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0my_train\u001b[0m \u001b[1;33m-\u001b[0m \u001b[0my_train_pred_lr\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mbins\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;36m40\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mlabel\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;34m'Residuals Linear'\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mcolor\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;34m'b'\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0malpha\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;36m5\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m;\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m     26\u001b[0m \u001b[0max\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mset_title\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"Histogram of Residuals\"\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m     27\u001b[0m \u001b[0max\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mlegend\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mloc\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;34m'best'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m;\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32md:\\python\\python_pycharm\\venv\\lib\\site-packages\\matplotlib\\__init__.py\u001b[0m in \u001b[0;36minner\u001b[1;34m(ax, data, *args, **kwargs)\u001b[0m\n\u001b[0;32m   1599\u001b[0m     \u001b[1;32mdef\u001b[0m \u001b[0minner\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0max\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m*\u001b[0m\u001b[0margs\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mdata\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;32mNone\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m   1600\u001b[0m         \u001b[1;32mif\u001b[0m \u001b[0mdata\u001b[0m \u001b[1;32mis\u001b[0m \u001b[1;32mNone\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 1601\u001b[1;33m             \u001b[1;32mreturn\u001b[0m \u001b[0mfunc\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0max\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m*\u001b[0m\u001b[0mmap\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0msanitize_sequence\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0margs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m   1602\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m   1603\u001b[0m         \u001b[0mbound\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mnew_sig\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mbind\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0max\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m*\u001b[0m\u001b[0margs\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32md:\\python\\python_pycharm\\venv\\lib\\site-packages\\matplotlib\\axes\\_axes.py\u001b[0m in \u001b[0;36mhist\u001b[1;34m(self, x, bins, range, density, weights, cumulative, bottom, histtype, align, orientation, rwidth, log, color, label, stacked, normed, **kwargs)\u001b[0m\n\u001b[0;32m   6955\u001b[0m             \u001b[1;32mif\u001b[0m \u001b[0mpatch\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m   6956\u001b[0m                 \u001b[0mp\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mpatch\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 6957\u001b[1;33m                 \u001b[0mp\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mupdate\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m   6958\u001b[0m                 \u001b[1;32mif\u001b[0m \u001b[0mlbl\u001b[0m \u001b[1;32mis\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[1;32mNone\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m   6959\u001b[0m                     \u001b[0mp\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mset_label\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mlbl\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32md:\\python\\python_pycharm\\venv\\lib\\site-packages\\matplotlib\\artist.py\u001b[0m in \u001b[0;36mupdate\u001b[1;34m(self, props)\u001b[0m\n\u001b[0;32m    972\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    973\u001b[0m         \u001b[1;32mwith\u001b[0m \u001b[0mcbook\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_setattr_cm\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0meventson\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;32mFalse\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 974\u001b[1;33m             \u001b[0mret\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;33m[\u001b[0m\u001b[0m_update_property\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mk\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mv\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;32mfor\u001b[0m \u001b[0mk\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mv\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mprops\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mitems\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    975\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    976\u001b[0m         \u001b[1;32mif\u001b[0m \u001b[0mlen\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mret\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32md:\\python\\python_pycharm\\venv\\lib\\site-packages\\matplotlib\\artist.py\u001b[0m in \u001b[0;36m<listcomp>\u001b[1;34m(.0)\u001b[0m\n\u001b[0;32m    972\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    973\u001b[0m         \u001b[1;32mwith\u001b[0m \u001b[0mcbook\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_setattr_cm\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0meventson\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;32mFalse\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 974\u001b[1;33m             \u001b[0mret\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;33m[\u001b[0m\u001b[0m_update_property\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mk\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mv\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;32mfor\u001b[0m \u001b[0mk\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mv\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mprops\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mitems\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    975\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    976\u001b[0m         \u001b[1;32mif\u001b[0m \u001b[0mlen\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mret\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32md:\\python\\python_pycharm\\venv\\lib\\site-packages\\matplotlib\\artist.py\u001b[0m in \u001b[0;36m_update_property\u001b[1;34m(self, k, v)\u001b[0m\n\u001b[0;32m    969\u001b[0m                     raise AttributeError('{!r} object has no property {!r}'\n\u001b[0;32m    970\u001b[0m                                          .format(type(self).__name__, k))\n\u001b[1;32m--> 971\u001b[1;33m                 \u001b[1;32mreturn\u001b[0m \u001b[0mfunc\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mv\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    972\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    973\u001b[0m         \u001b[1;32mwith\u001b[0m \u001b[0mcbook\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_setattr_cm\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0meventson\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;32mFalse\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32md:\\python\\python_pycharm\\venv\\lib\\site-packages\\matplotlib\\patches.py\u001b[0m in \u001b[0;36mset_alpha\u001b[1;34m(self, alpha)\u001b[0m\n\u001b[0;32m    349\u001b[0m                 \u001b[1;32mraise\u001b[0m \u001b[0mTypeError\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'alpha must be a float or None'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    350\u001b[0m         \u001b[0martist\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mArtist\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mset_alpha\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0malpha\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 351\u001b[1;33m         \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_set_facecolor\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_original_facecolor\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    352\u001b[0m         \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_set_edgecolor\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_original_edgecolor\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    353\u001b[0m         \u001b[1;31m# stale is already True\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32md:\\python\\python_pycharm\\venv\\lib\\site-packages\\matplotlib\\patches.py\u001b[0m in \u001b[0;36m_set_facecolor\u001b[1;34m(self, color)\u001b[0m\n\u001b[0;32m    305\u001b[0m             \u001b[0mcolor\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mmpl\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mrcParams\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;34m'patch.facecolor'\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    306\u001b[0m         \u001b[0malpha\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_alpha\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_fill\u001b[0m \u001b[1;32melse\u001b[0m \u001b[1;36m0\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 307\u001b[1;33m         \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_facecolor\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mcolors\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mto_rgba\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mcolor\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0malpha\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    308\u001b[0m         \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mstale\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;32mTrue\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    309\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32md:\\python\\python_pycharm\\venv\\lib\\site-packages\\matplotlib\\colors.py\u001b[0m in \u001b[0;36mto_rgba\u001b[1;34m(c, alpha)\u001b[0m\n\u001b[0;32m    175\u001b[0m         \u001b[0mrgba\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;32mNone\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    176\u001b[0m     \u001b[1;32mif\u001b[0m \u001b[0mrgba\u001b[0m \u001b[1;32mis\u001b[0m \u001b[1;32mNone\u001b[0m\u001b[1;33m:\u001b[0m  \u001b[1;31m# Suppress exception chaining of cache lookup failure.\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 177\u001b[1;33m         \u001b[0mrgba\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0m_to_rgba_no_colorcycle\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mc\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0malpha\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    178\u001b[0m         \u001b[1;32mtry\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    179\u001b[0m             \u001b[0m_colors_full_map\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mcache\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mc\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0malpha\u001b[0m\u001b[1;33m]\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mrgba\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32md:\\python\\python_pycharm\\venv\\lib\\site-packages\\matplotlib\\colors.py\u001b[0m in \u001b[0;36m_to_rgba_no_colorcycle\u001b[1;34m(c, alpha)\u001b[0m\n\u001b[0;32m    248\u001b[0m         \u001b[0mc\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mc\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;36m3\u001b[0m\u001b[1;33m]\u001b[0m \u001b[1;33m+\u001b[0m \u001b[1;33m(\u001b[0m\u001b[0malpha\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    249\u001b[0m     \u001b[1;32mif\u001b[0m \u001b[0many\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0melem\u001b[0m \u001b[1;33m<\u001b[0m \u001b[1;36m0\u001b[0m \u001b[1;32mor\u001b[0m \u001b[0melem\u001b[0m \u001b[1;33m>\u001b[0m \u001b[1;36m1\u001b[0m \u001b[1;32mfor\u001b[0m \u001b[0melem\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mc\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 250\u001b[1;33m         \u001b[1;32mraise\u001b[0m \u001b[0mValueError\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"RGBA values should be within 0-1 range\"\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    251\u001b[0m     \u001b[1;32mreturn\u001b[0m \u001b[0mc\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    252\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;31mValueError\u001b[0m: RGBA values should be within 0-1 range"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 504x360 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#model\n",
    "from sklearn.metrics import r2_score\n",
    "from sklearn.linear_model import LinearRegression\n",
    "\n",
    "\n",
    "#LinearRegression\n",
    "lr = LinearRegression()\n",
    "#2.训练数据训练模型\n",
    "lr.fit(X_train,y_train)\n",
    "#3.预测\n",
    "y_test_pred_lr = lr.predict(X_test)\n",
    "y_train_pred_lr = lr.predict(X_train)\n",
    "\n",
    "#权重系数，\n",
    "fs = pd.DataFrame({\"columns\":list(feat_names),\"coef\":list((lr.coef_.T))})\n",
    "fs.sort_values(by=['coef'],ascending=False)\n",
    "\n",
    "#model 评价\n",
    "#r2_score分数评价\n",
    "print('The r2 score of LinearRegression on test is ',r2_score(y_test,y_test_pred_lr))\n",
    "print('The r2 score of LinearRegression on train is ',r2_score(y_train,y_train_pred_lr))\n",
    "#在训练集上观察预测残差的分布，高斯噪声：均值为0\n",
    "f, ax = plt.subplots(figsize=(7, 5))\n",
    "f.tight_layout()\n",
    "ax.hist(y_train - y_train_pred_lr, bins=40, label='Residuals Linear', color='b', alpha=5);\n",
    "ax.set_title(\"Histogram of Residuals\")\n",
    "ax.legend(loc='best');\n",
    "#观察预测值与真值的散点图\n",
    "plt.figure(figsize=(4,3))\n",
    "plt.scatter(y_train,y_train_pred_lr)\n",
    "plt.plot([-3,3],[-3,3],'--k')  #标准化后，3倍标准差\n",
    "plt.axis('tight')\n",
    "plt.xlabel('True price')\n",
    "plt.ylabel('Predicted price')\n",
    "plt.tight_layout()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The r2 score of RidgeCV on test is 0.6961684813070034\n",
      "The r2 score of RidgeCV on train is 0.7548524440445546\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "alpha is : 0.1\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>columns</th>\n",
       "      <th>coef_lr</th>\n",
       "      <th>coef_ridge</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <td>5</td>\n",
       "      <td>RM</td>\n",
       "      <td>0.452377</td>\n",
       "      <td>0.449104</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>1</td>\n",
       "      <td>ZN</td>\n",
       "      <td>0.129239</td>\n",
       "      <td>0.125966</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>20</td>\n",
       "      <td>RAD_24</td>\n",
       "      <td>0.103221</td>\n",
       "      <td>0.099911</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>10</td>\n",
       "      <td>B</td>\n",
       "      <td>0.078899</td>\n",
       "      <td>0.079327</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>3</td>\n",
       "      <td>CHAS</td>\n",
       "      <td>0.059660</td>\n",
       "      <td>0.060075</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>18</td>\n",
       "      <td>RAD_7</td>\n",
       "      <td>0.037664</td>\n",
       "      <td>0.036712</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>19</td>\n",
       "      <td>RAD_8</td>\n",
       "      <td>0.030071</td>\n",
       "      <td>0.030423</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>14</td>\n",
       "      <td>RAD_3</td>\n",
       "      <td>0.027465</td>\n",
       "      <td>0.028356</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>2</td>\n",
       "      <td>INDUS</td>\n",
       "      <td>0.013818</td>\n",
       "      <td>0.011491</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>6</td>\n",
       "      <td>AGE</td>\n",
       "      <td>-0.001228</td>\n",
       "      <td>-0.001077</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>15</td>\n",
       "      <td>RAD_4</td>\n",
       "      <td>-0.008698</td>\n",
       "      <td>-0.008646</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>16</td>\n",
       "      <td>RAD_5</td>\n",
       "      <td>-0.011517</td>\n",
       "      <td>-0.011183</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>13</td>\n",
       "      <td>RAD_2</td>\n",
       "      <td>-0.040970</td>\n",
       "      <td>-0.039042</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>17</td>\n",
       "      <td>RAD_6</td>\n",
       "      <td>-0.055736</td>\n",
       "      <td>-0.055449</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>12</td>\n",
       "      <td>RAD_1</td>\n",
       "      <td>-0.081501</td>\n",
       "      <td>-0.081083</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>8</td>\n",
       "      <td>TAX</td>\n",
       "      <td>-0.113548</td>\n",
       "      <td>-0.110192</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>4</td>\n",
       "      <td>NOX</td>\n",
       "      <td>-0.151553</td>\n",
       "      <td>-0.145910</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>9</td>\n",
       "      <td>PTRATIO</td>\n",
       "      <td>-0.187898</td>\n",
       "      <td>-0.187369</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>0</td>\n",
       "      <td>CRIM</td>\n",
       "      <td>-0.221874</td>\n",
       "      <td>-0.212619</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>7</td>\n",
       "      <td>DIS</td>\n",
       "      <td>-0.386249</td>\n",
       "      <td>-0.374867</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>11</td>\n",
       "      <td>LSTAT</td>\n",
       "      <td>-0.476675</td>\n",
       "      <td>-0.474603</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    columns   coef_lr  coef_ridge\n",
       "5        RM  0.452377    0.449104\n",
       "1        ZN  0.129239    0.125966\n",
       "20   RAD_24  0.103221    0.099911\n",
       "10        B  0.078899    0.079327\n",
       "3      CHAS  0.059660    0.060075\n",
       "18    RAD_7  0.037664    0.036712\n",
       "19    RAD_8  0.030071    0.030423\n",
       "14    RAD_3  0.027465    0.028356\n",
       "2     INDUS  0.013818    0.011491\n",
       "6       AGE -0.001228   -0.001077\n",
       "15    RAD_4 -0.008698   -0.008646\n",
       "16    RAD_5 -0.011517   -0.011183\n",
       "13    RAD_2 -0.040970   -0.039042\n",
       "17    RAD_6 -0.055736   -0.055449\n",
       "12    RAD_1 -0.081501   -0.081083\n",
       "8       TAX -0.113548   -0.110192\n",
       "4       NOX -0.151553   -0.145910\n",
       "9   PTRATIO -0.187898   -0.187369\n",
       "0      CRIM -0.221874   -0.212619\n",
       "7       DIS -0.386249   -0.374867\n",
       "11    LSTAT -0.476675   -0.474603"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#岭回归\n",
    "from sklearn.linear_model import RidgeCV\n",
    "\n",
    "#设置超参数范围\n",
    "alphas = [0.01,0.1,1,10,100]\n",
    "\n",
    "#RsidgeCV实例\n",
    "ridge = RidgeCV(alphas=alphas, store_cv_values=True)\n",
    "\n",
    "#模型训练\n",
    "ridge.fit(X_train, y_train)\n",
    "\n",
    "#预测\n",
    "y_test_pred_ridge = ridge.predict(X_test)\n",
    "y_train_pred_ridge = ridge.predict(X_train)\n",
    "\n",
    "#评估\n",
    "#r2_score\n",
    "print('The r2 score of RidgeCV on test is',r2_score(y_test,y_test_pred_ridge))\n",
    "print('The r2 score of RidgeCV on train is',r2_score(y_train,y_train_pred_ridge))\n",
    "#可视化\n",
    "mse_mean = np.mean(ridge.cv_values_,axis = 0)\n",
    "plt.plot(np.log10(alphas),mse_mean.reshape(len(alphas),1))\n",
    "plt.xlabel('log(alpha)')\n",
    "plt.ylabel('mse')\n",
    "plt.show()\n",
    "print('alpha is :',ridge.alpha_)\n",
    "#权重系数\n",
    "fs = pd.DataFrame({\"columns\":list(feat_names),\"coef_lr\":list((lr.coef_.T)),\"coef_ridge\":list((ridge.coef_.T))})\n",
    "fs.sort_values(by=['coef_lr'],ascending=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The r2 score of LassoCV on test is 0.6945099371682093\n",
      "The r2 score of LassoCV on train is 0.7548861511225583\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "d:\\python\\python_pycharm\\venv\\lib\\site-packages\\sklearn\\model_selection\\_split.py:1978: FutureWarning: The default value of cv will change from 3 to 5 in version 0.22. Specify it explicitly to silence this warning.\n",
      "  warnings.warn(CV_WARNING, FutureWarning)\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "alpha is 3.0853701706804334e-05\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>,columns</th>\n",
       "      <th>coef_lr</th>\n",
       "      <th>coef_ridge</th>\n",
       "      <th>coef_lasso</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <td>5</td>\n",
       "      <td>RM</td>\n",
       "      <td>0.452377</td>\n",
       "      <td>0.449104</td>\n",
       "      <td>0.452220</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>1</td>\n",
       "      <td>ZN</td>\n",
       "      <td>0.129239</td>\n",
       "      <td>0.125966</td>\n",
       "      <td>0.126455</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>20</td>\n",
       "      <td>RAD_24</td>\n",
       "      <td>0.103221</td>\n",
       "      <td>0.099911</td>\n",
       "      <td>0.107770</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>10</td>\n",
       "      <td>B</td>\n",
       "      <td>0.078899</td>\n",
       "      <td>0.079327</td>\n",
       "      <td>0.078393</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>3</td>\n",
       "      <td>CHAS</td>\n",
       "      <td>0.059660</td>\n",
       "      <td>0.060075</td>\n",
       "      <td>0.059860</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>18</td>\n",
       "      <td>RAD_7</td>\n",
       "      <td>0.037664</td>\n",
       "      <td>0.036712</td>\n",
       "      <td>0.044859</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>19</td>\n",
       "      <td>RAD_8</td>\n",
       "      <td>0.030071</td>\n",
       "      <td>0.030423</td>\n",
       "      <td>0.037731</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>14</td>\n",
       "      <td>RAD_3</td>\n",
       "      <td>0.027465</td>\n",
       "      <td>0.028356</td>\n",
       "      <td>0.036252</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>2</td>\n",
       "      <td>INDUS</td>\n",
       "      <td>0.013818</td>\n",
       "      <td>0.011491</td>\n",
       "      <td>0.009386</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>6</td>\n",
       "      <td>AGE</td>\n",
       "      <td>-0.001228</td>\n",
       "      <td>-0.001077</td>\n",
       "      <td>-0.000539</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>15</td>\n",
       "      <td>RAD_4</td>\n",
       "      <td>-0.008698</td>\n",
       "      <td>-0.008646</td>\n",
       "      <td>-0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>16</td>\n",
       "      <td>RAD_5</td>\n",
       "      <td>-0.011517</td>\n",
       "      <td>-0.011183</td>\n",
       "      <td>-0.002815</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>13</td>\n",
       "      <td>RAD_2</td>\n",
       "      <td>-0.040970</td>\n",
       "      <td>-0.039042</td>\n",
       "      <td>-0.030355</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>17</td>\n",
       "      <td>RAD_6</td>\n",
       "      <td>-0.055736</td>\n",
       "      <td>-0.055449</td>\n",
       "      <td>-0.046966</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>12</td>\n",
       "      <td>RAD_1</td>\n",
       "      <td>-0.081501</td>\n",
       "      <td>-0.081083</td>\n",
       "      <td>-0.071929</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>8</td>\n",
       "      <td>TAX</td>\n",
       "      <td>-0.113548</td>\n",
       "      <td>-0.110192</td>\n",
       "      <td>-0.108287</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>4</td>\n",
       "      <td>NOX</td>\n",
       "      <td>-0.151553</td>\n",
       "      <td>-0.145910</td>\n",
       "      <td>-0.147394</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>9</td>\n",
       "      <td>PTRATIO</td>\n",
       "      <td>-0.187898</td>\n",
       "      <td>-0.187369</td>\n",
       "      <td>-0.186683</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>0</td>\n",
       "      <td>CRIM</td>\n",
       "      <td>-0.221874</td>\n",
       "      <td>-0.212619</td>\n",
       "      <td>-0.215736</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>7</td>\n",
       "      <td>DIS</td>\n",
       "      <td>-0.386249</td>\n",
       "      <td>-0.374867</td>\n",
       "      <td>-0.380508</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>11</td>\n",
       "      <td>LSTAT</td>\n",
       "      <td>-0.476675</td>\n",
       "      <td>-0.474603</td>\n",
       "      <td>-0.477194</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   ,columns   coef_lr  coef_ridge  coef_lasso\n",
       "5        RM  0.452377    0.449104    0.452220\n",
       "1        ZN  0.129239    0.125966    0.126455\n",
       "20   RAD_24  0.103221    0.099911    0.107770\n",
       "10        B  0.078899    0.079327    0.078393\n",
       "3      CHAS  0.059660    0.060075    0.059860\n",
       "18    RAD_7  0.037664    0.036712    0.044859\n",
       "19    RAD_8  0.030071    0.030423    0.037731\n",
       "14    RAD_3  0.027465    0.028356    0.036252\n",
       "2     INDUS  0.013818    0.011491    0.009386\n",
       "6       AGE -0.001228   -0.001077   -0.000539\n",
       "15    RAD_4 -0.008698   -0.008646   -0.000000\n",
       "16    RAD_5 -0.011517   -0.011183   -0.002815\n",
       "13    RAD_2 -0.040970   -0.039042   -0.030355\n",
       "17    RAD_6 -0.055736   -0.055449   -0.046966\n",
       "12    RAD_1 -0.081501   -0.081083   -0.071929\n",
       "8       TAX -0.113548   -0.110192   -0.108287\n",
       "4       NOX -0.151553   -0.145910   -0.147394\n",
       "9   PTRATIO -0.187898   -0.187369   -0.186683\n",
       "0      CRIM -0.221874   -0.212619   -0.215736\n",
       "7       DIS -0.386249   -0.374867   -0.380508\n",
       "11    LSTAT -0.476675   -0.474603   -0.477194"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#Lasso\n",
    "from sklearn.linear_model import LassoCV\n",
    "#设置超参数\n",
    "#alphas = [0.01,0.1,1,10,100]\n",
    "#实例\n",
    "#lasso = LassoCV(alphas=alphas)\n",
    "lasso = LassoCV()\n",
    "#训练\n",
    "lasso.fit(X_train,y_train)\n",
    "#测试\n",
    "y_test_pred_lasso = lasso.predict(X_test)\n",
    "y_train_pred_lasso = lasso.predict(X_train)\n",
    "\n",
    "#评估\n",
    "#r2 score\n",
    "print('The r2 score of LassoCV on test is',r2_score(y_test,y_test_pred_lasso))\n",
    "print('The r2 score of LassoCV on train is',r2_score(y_train,y_train_pred_lasso))\n",
    "#可视化\n",
    "mses = np.mean(lasso.mse_path_,axis = 1)\n",
    "plt.plot(np.log10(lasso.alphas_),mses)\n",
    "plt.xlabel('log(alpha)')\n",
    "plt.ylabel('mse')\n",
    "plt.show()\n",
    "print('alpha is',lasso.alpha_)\n",
    "#权重系数\n",
    "fs = pd.DataFrame({\",columns\":list(feat_names),\"coef_lr\":list((lr.coef_.T)),\"coef_ridge\":list((ridge.coef_.T)),\"coef_lasso\":list((lasso.coef_.T))})\n",
    "fs.sort_values(by=['coef_lr'],ascending=False)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 5. 代码中给出了岭回归（RidgeCV）和Lasso（LassoCV）超参数（alpha_）调优的过程，请结合两个最佳模型以及最小二乘线性回归模型的结果，给出什么场合应该用岭回归，什么场合用Lasso，什么场合用最小二乘。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The r2 score of RidgeCV on test is 0.6961684813070034\n",
      "The r2 score of LassoCV on test is 0.6945099371682093\n",
      "The r2 score of LinearRegression on test is  0.6939789810509474\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>,columns</th>\n",
       "      <th>coef_lr</th>\n",
       "      <th>coef_ridge</th>\n",
       "      <th>coef_lasso</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <td>5</td>\n",
       "      <td>RM</td>\n",
       "      <td>0.452377</td>\n",
       "      <td>0.449104</td>\n",
       "      <td>0.452220</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>1</td>\n",
       "      <td>ZN</td>\n",
       "      <td>0.129239</td>\n",
       "      <td>0.125966</td>\n",
       "      <td>0.126455</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>20</td>\n",
       "      <td>RAD_24</td>\n",
       "      <td>0.103221</td>\n",
       "      <td>0.099911</td>\n",
       "      <td>0.107770</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>10</td>\n",
       "      <td>B</td>\n",
       "      <td>0.078899</td>\n",
       "      <td>0.079327</td>\n",
       "      <td>0.078393</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>3</td>\n",
       "      <td>CHAS</td>\n",
       "      <td>0.059660</td>\n",
       "      <td>0.060075</td>\n",
       "      <td>0.059860</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>18</td>\n",
       "      <td>RAD_7</td>\n",
       "      <td>0.037664</td>\n",
       "      <td>0.036712</td>\n",
       "      <td>0.044859</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>19</td>\n",
       "      <td>RAD_8</td>\n",
       "      <td>0.030071</td>\n",
       "      <td>0.030423</td>\n",
       "      <td>0.037731</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>14</td>\n",
       "      <td>RAD_3</td>\n",
       "      <td>0.027465</td>\n",
       "      <td>0.028356</td>\n",
       "      <td>0.036252</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>2</td>\n",
       "      <td>INDUS</td>\n",
       "      <td>0.013818</td>\n",
       "      <td>0.011491</td>\n",
       "      <td>0.009386</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>6</td>\n",
       "      <td>AGE</td>\n",
       "      <td>-0.001228</td>\n",
       "      <td>-0.001077</td>\n",
       "      <td>-0.000539</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>15</td>\n",
       "      <td>RAD_4</td>\n",
       "      <td>-0.008698</td>\n",
       "      <td>-0.008646</td>\n",
       "      <td>-0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>16</td>\n",
       "      <td>RAD_5</td>\n",
       "      <td>-0.011517</td>\n",
       "      <td>-0.011183</td>\n",
       "      <td>-0.002815</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>13</td>\n",
       "      <td>RAD_2</td>\n",
       "      <td>-0.040970</td>\n",
       "      <td>-0.039042</td>\n",
       "      <td>-0.030355</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>17</td>\n",
       "      <td>RAD_6</td>\n",
       "      <td>-0.055736</td>\n",
       "      <td>-0.055449</td>\n",
       "      <td>-0.046966</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>12</td>\n",
       "      <td>RAD_1</td>\n",
       "      <td>-0.081501</td>\n",
       "      <td>-0.081083</td>\n",
       "      <td>-0.071929</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>8</td>\n",
       "      <td>TAX</td>\n",
       "      <td>-0.113548</td>\n",
       "      <td>-0.110192</td>\n",
       "      <td>-0.108287</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>4</td>\n",
       "      <td>NOX</td>\n",
       "      <td>-0.151553</td>\n",
       "      <td>-0.145910</td>\n",
       "      <td>-0.147394</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>9</td>\n",
       "      <td>PTRATIO</td>\n",
       "      <td>-0.187898</td>\n",
       "      <td>-0.187369</td>\n",
       "      <td>-0.186683</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>0</td>\n",
       "      <td>CRIM</td>\n",
       "      <td>-0.221874</td>\n",
       "      <td>-0.212619</td>\n",
       "      <td>-0.215736</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>7</td>\n",
       "      <td>DIS</td>\n",
       "      <td>-0.386249</td>\n",
       "      <td>-0.374867</td>\n",
       "      <td>-0.380508</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>11</td>\n",
       "      <td>LSTAT</td>\n",
       "      <td>-0.476675</td>\n",
       "      <td>-0.474603</td>\n",
       "      <td>-0.477194</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   ,columns   coef_lr  coef_ridge  coef_lasso\n",
       "5        RM  0.452377    0.449104    0.452220\n",
       "1        ZN  0.129239    0.125966    0.126455\n",
       "20   RAD_24  0.103221    0.099911    0.107770\n",
       "10        B  0.078899    0.079327    0.078393\n",
       "3      CHAS  0.059660    0.060075    0.059860\n",
       "18    RAD_7  0.037664    0.036712    0.044859\n",
       "19    RAD_8  0.030071    0.030423    0.037731\n",
       "14    RAD_3  0.027465    0.028356    0.036252\n",
       "2     INDUS  0.013818    0.011491    0.009386\n",
       "6       AGE -0.001228   -0.001077   -0.000539\n",
       "15    RAD_4 -0.008698   -0.008646   -0.000000\n",
       "16    RAD_5 -0.011517   -0.011183   -0.002815\n",
       "13    RAD_2 -0.040970   -0.039042   -0.030355\n",
       "17    RAD_6 -0.055736   -0.055449   -0.046966\n",
       "12    RAD_1 -0.081501   -0.081083   -0.071929\n",
       "8       TAX -0.113548   -0.110192   -0.108287\n",
       "4       NOX -0.151553   -0.145910   -0.147394\n",
       "9   PTRATIO -0.187898   -0.187369   -0.186683\n",
       "0      CRIM -0.221874   -0.212619   -0.215736\n",
       "7       DIS -0.386249   -0.374867   -0.380508\n",
       "11    LSTAT -0.476675   -0.474603   -0.477194"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.linear_model import Ridge\n",
    "from sklearn.linear_model import Lasso\n",
    "from sklearn.linear_model import LinearRegression\n",
    "\n",
    "#岭回归\n",
    "ridge_best = Ridge(alpha=ridge.alpha_)\n",
    "ridge_best.fit(X_train,y_train)\n",
    "y_test_predict_redge = ridge_best.predict(X_test)\n",
    "\n",
    "#Lasso\n",
    "lasso_best = Lasso(alpha=lasso.alpha_)\n",
    "lasso_best.fit(X_train,y_train)\n",
    "y_test_predict_redge = ridge_best.predict(X_test)\n",
    "\n",
    "#r2 数值分数比较\n",
    "print('The r2 score of RidgeCV on test is',r2_score(y_test,y_test_pred_ridge))\n",
    "print('The r2 score of LassoCV on test is',r2_score(y_test,y_test_pred_lasso))\n",
    "print('The r2 score of LinearRegression on test is ',r2_score(y_test,y_test_pred_lr))\n",
    "\n",
    "#可视化\n",
    "mse_mean = np.mean(ridge.cv_values_,axis = 0)#ridge\n",
    "plt.plot(np.log10(alphas),mse_mean.reshape(len(alphas),1))\n",
    "mses = np.mean(lasso.mse_path_,axis = 1)#lasso\n",
    "plt.plot(np.log10(lasso.alphas_),mses)\n",
    "plt.legend(('RidgeCV','LassoCV'),loc='upper right')\n",
    "plt.xlabel('log(alpha)',fontsize=12)\n",
    "plt.ylabel('mse',fontsize=12)\n",
    "plt.show()\n",
    "\n",
    "#特征权重系数\n",
    "fs = pd.DataFrame({\",columns\":list(feat_names),\"coef_lr\":list((lr.coef_.T)),\"coef_ridge\":list((ridge.coef_.T)),\"coef_lasso\":list((lasso.coef_.T))})\n",
    "fs.sort_values(by=['coef_lr'],ascending=False)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "结合结果，分析可得，LassoCV、RidgeCV和LR模型的r2分数值均约为0.69，模型在测试上，分数差异不大；其次，在可视化图中，RidgeCV明显靠右，而LassoCV明显靠左，说明在超参数选取上，差异较大。\n",
    "\n",
    "结果总结：模型分析：最小二乘线性回归只有残差平方，没有加入正则项；Ridge线性回归在残差平方的基础上，加入了L2正则项，可以对权重系数进行收缩，其次，还可以保证模型的稳定性；Lasso线性回归在残差平方的基础上，加入了L1正则项，也可以对权重系数进行收缩，但一般收缩没有Ridge好。\n",
    "\n",
    "场合模型的选择：经过结果分析，可以看出，各模型的优劣点：在较为简单的数据集、较为低维的特征集中，可以选用最小二乘线性回归，可以降低时间复杂度，在特征之间有共线性，或者对模型有高要求，亦或噪声点较为离散的情况，可以选择使用Ridge，较之则可以更好的处理数据；夹杂在Ridge和最小二乘之间的Lasso model，在离散程度不是很大，处理噪声点不是很严重的情况，可以考虑Lasso，比Ridge的时间复杂度更好。\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
